/*
 * @Author: caihongtai caihongtai
 * @Date: 2025-02-08 20:55:16
 * @LastEditors: caihongtai caihongtai
 * @LastEditTime: 2025-03-23 13:13:50
 * @FilePath: /ai-interview-vue/vite.config.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import createAutoImport from './config/auto-import'
// https://vite.dev/config/
export default defineConfig(({ command, mode }) => {
  // 根据当前工作目录中的 `mode` 加载 .env 文件
  const env = loadEnv(mode, process.cwd())

  return {
    // base: './', // 修改这里，使用相对路径
    plugins: [
      vue(),
      createAutoImport()
    ],
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src')
      }
    },
    server: {
      proxy: {
        [env.VITE_APP_BASE_API]: {
          target: 'https://ointerview.com/',  // 改用 www 子域名env.VITE_APP_BASE_URL
          changeOrigin: true,
          rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '/api')  // 修改重写规则
        }
      }
    },
    build: {
      // 生产环境移除 console
      minify: 'terser',
      terserOptions: {
        compress: {
          drop_console: true,
          drop_debugger: true,
        },
      },
      // 确保将 assets 目录下的资源复制到构建目录
      assetsInlineLimit: 4096, // 4kb以下的资源将被转为base64
      // 打包文件分类
      rollupOptions: {
        input: {
          main: path.resolve(__dirname, 'index.html')
        },
        output: {
          chunkFileNames: 'static/js/[name]-[hash].js',
          entryFileNames: 'static/js/[name]-[hash].js',
          assetFileNames: (assetInfo) => {
            const info = assetInfo.name.split('.')
            let extType = info[info.length - 1]
            // 处理图片资源
            if (/\.(png|jpe?g|gif|svg|webp|ico)(\?.*)?$/.test(assetInfo.name)) {
              extType = 'img'
              return `static/${extType}/[name]-[hash][extname]`
            }
            // 处理其他资源
            return `static/other/[name]-[hash][extname]`
          },
          // 分包配置
          manualChunks: {
            'vue-vendor': ['vue', 'vue-router', 'pinia'],
            'vant': ['vant'],
          }
        }
      },
      // 设置最终构建的浏览器兼容目标
      target: 'es2015',
      // 构建后是否生成 source map 文件
      sourcemap: mode === 'development',
      // chunk 大小警告的限制（以 kbs 为单位）
      chunkSizeWarningLimit: 2000,
    },
    // 添加对静态资源的处理
    assetsInclude: ['**/*.png', '**/*.jpg', '**/*.jpeg', '**/*.gif', '**/*.svg'],
  }
})
